import numpy as np
from sklearn.neighbors import LocalOutlierFactor
import matplotlib.pyplot as plt

# 假设你有一串包含2000个数字的数据
one_dimensional_data = [10,5,-1,5.1,5.0,5.0,5.3,5.1,9,9]  # 实际应用中请替换为你的数据
data_as_numpy_array = np.array(one_dimensional_data)

# 将一维数据转换为二维数据，每个样本只有一个特征
two_dimensional_data = data_as_numpy_array.reshape(-1, 1)

# 初始化LOF模型，假设邻居数量为20
clf = LocalOutlierFactor(n_neighbors=5)

# 计算LOF得分
lof_scores = clf.fit_predict(two_dimensional_data)
print(lof_scores)

# LOF得分中负值代表正常点，正值代表异常点
outliers = np.where(lof_scores == -1)[0]
print(outliers)

# 统计这些异常点索引中大于3的数量
outliers_greater_than_three_index_count = np.sum(outliers > 3)
print("异常点中序号大于3的数量：", outliers_greater_than_three_index_count)
print("正常点的数量：", len(outliers))

# 创建一个相同长度的数组用于存储颜色信息，正常点为蓝色，异常点为红色
colors = ['blue'] * len(two_dimensional_data)
for anomaly in outliers:
    colors[anomaly] = 'red'

plt.scatter(range(len(two_dimensional_data)), two_dimensional_data, c=colors)

# 添加其他图形元素，如标题、坐标轴标签等
plt.title('Data with Anomalies')
plt.xlabel('Index')
plt.ylabel('Value')

# 显示图形
plt.show()

